package wiki.daos;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

import wiki.banco.Conexao;
import wiki.beans.Cidade;

public class CidadeDAO 
{
	Conexao conexao;
	
	
	public CidadeDAO()
	{
		conexao = new Conexao();
	}
	
	
	protected void finalize()
	{
		conexao.fechar();
	}
	
	
	public ArrayList<Cidade> buscarTodos()
	{
	    ArrayList<Cidade> arrayRegistros = new ArrayList<Cidade>();
	    
	    String query = "SELECT idCidade, Nome, codUF FROM cidade ORDER BY idCidade";
	    conexao.preparar(query);
	    
	    try
	    {
	      ResultSet rs = conexao.executeQuery();
	      
	      while (rs.next())
	      {
	    	  arrayRegistros.add(new Cidade(rs.getInt("idCidade"), rs.getString("Nome"), rs.getString("codUF")));
	      }
	      
	      rs.close();
	      
	    } 
	    catch (SQLException ex)
	    {
	      Logger.getLogger(CidadeDAO.class.getName()).log(Level.SEVERE, null, ex);
	    }
	    
	    return arrayRegistros;
	}
	
	
	@SuppressWarnings("finally")
	public Cidade buscarPorID(int id)
	{
	    Cidade Cidade = null;
	    String query = "SELECT idCidade, Nome, codUF FROM Cidade WHERE idCidade=?";

	    conexao.preparar(query);
	    try
	    {
	      conexao.getPstmt().setInt(1, id);
	      ResultSet rs = conexao.executeQuery();
	      
	      while (rs.next())
	      {
	    	  Cidade = new Cidade(id, rs.getString("Nome"), rs.getString("codUF"));
	      }
	      rs.close();
	      
	    } 
	    catch (SQLException ex)
	    {
	      Logger.getLogger(CidadeDAO.class.getName()).log(Level.SEVERE, null, ex);
	    }
	    finally
	    {
	      return Cidade;
	    }
	}
	
	
	@SuppressWarnings("finally")
	public ArrayList<Cidade> buscarPorNome(String nome)
	{
	    ArrayList<Cidade> cidade = new ArrayList<Cidade>();
	    String query = "SELECT idCidade, nome, codUF FROM Cidade WHERE nome LIKE ?";

	    conexao.preparar(query);
	    try
	    {
	      conexao.getPstmt().setString(1, "%"+nome+"%");
	      ResultSet rs = conexao.executeQuery();
	      
	      while (rs.next())
	      {
	    	  cidade.add(new Cidade(rs.getInt("idCidade"), rs.getString("nome"), rs.getString("codUF")));
	      }
	      rs.close();
	      
	    } 
	    catch (SQLException ex)
	    {
	      Logger.getLogger(CidadeDAO.class.getName()).log(Level.SEVERE, null, ex);
	    }
	    finally
	    {
	      return cidade;
	    }
	}

	public ArrayList<Cidade> buscarPorUF(String uf)
	{
	    ArrayList<Cidade> arrayRegistros = new ArrayList<Cidade>();
	    
	    String query = "SELECT idCidade, nome, codUF FROM cidade WHERE codUF=? ORDER BY nome";
	    conexao.preparar(query);
	    
	    try
	    {
	    	conexao.getPstmt().setString(1, uf);
	    	ResultSet rs = conexao.executeQuery();
	      
	      while (rs.next())
	      {
	    	  arrayRegistros.add(new Cidade(rs.getInt("idCidade"), rs.getString("nome"), rs.getString("codUF")));
	      }
	      
	      rs.close();
	      
	    } 
	    catch (SQLException ex)
	    {
	      Logger.getLogger(CidadeDAO.class.getName()).log(Level.SEVERE, null, ex);
	    }
	    
	    return arrayRegistros;
	}
	
	public ArrayList<Cidade> buscarPorNomeUF(String nome, String uf)
	{
	    ArrayList<Cidade> cidade = new ArrayList<Cidade>();
	    String query = "SELECT idCidade, nome, codUF FROM Cidade WHERE nome LIKE ? AND codUF=?";

	    conexao.preparar(query);
	    try
	    {
	      conexao.getPstmt().setString(1, "%"+nome+"%");
	      conexao.getPstmt().setString(2, uf);
	      ResultSet rs = conexao.executeQuery();
	      
	      while (rs.next())
	      {
	    	  cidade.add(new Cidade(rs.getInt("idCidade"), rs.getString("nome"), rs.getString("codUF")));
	      }
	      rs.close();
	      
	    } 
	    catch (SQLException ex)
	    {
	      Logger.getLogger(CidadeDAO.class.getName()).log(Level.SEVERE, null, ex);
	    }
	    finally
	    {
	      return cidade;
	    }
	}
}
